/* Soubor je ulozen v kodovani UTF-8.
 * Kontrola kódování: Příliš žluťoučký kůň úpěl ďábelské ódy. */

package cz.vse.adventura.po1715.xshet00_shevtsova.hra;

import static cz.vse.adventura.po1715.xshet00_shevtsova.hra.Texty.*;



/*******************************************************************************
 * Instance třídy {@code PrikazPodloz} představují příkaz podlož
 *
 * @author   Tatyana Shevtsova
 * @version  
 */
public class PrikazPodloz extends APrikaz
{
//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================
//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================
//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================
//== OSTATNÍ NESOUKROMÉ METODY TŘÍDY ===========================================

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     * Vytvoří instanci mající na strosti reakci na příkaz <b>jdi</b>,
     * po jehož zadaní se hráč přesune do místnosti,
     * jejíž název bude uveden za příkazem.
     */
    public PrikazPodloz()
    {
        super( pPODLOŽ, //"Podlož",
               "Podloží předmět zadaný v prvním parametru\n" +
               "předmětem zadaným v druhém parametru." );
    }


//== ABSTRAKTNÍ METODY =========================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ INSTANCÍ =====================================
//== OSTATNÍ NESOUKROMÉ METODY INSTANCÍ ========================================

    /***************************************************************************
     * Příkaz vyjme druhý zadaný předmět z batohu a podloží s ním první
     * zadaný předmět; před tím však nejprve zkontroluje,
     * zda byly zadány oba předměty, zda se předmět, kterým se má druhý předmět
     * podložit, má hráč aktuálně v batohu, zda má hráč aktuálně jednu ruku
     * volnou, aby s ní mohl podkládaný předmět nadzvednout.
     * Při podkládání jiných předmětů než postel pouze oznámí provedení akce.
     * Je-li podkládaným předmětem postel, tak je-li podkládána časopisem,
     * oznámí úšpěšnost akce, jinak prozradí, že nadále nejde otevřít.
     *
     * @param parametry Název předmětu, který se má položit,
     *                  následovaný názvem předmětu, kterým se podklá
     * @return Text zpravy vypsane po porovedeni prikazu
     */
    @Override
    public String execute( String... parametry )
    {
        if (parametry.length != 2) {
            return "Příkaz potřebuje dva parametry:\n" +
                   "předmět, který se má podložit a\n" +
                   "předmět, kterým se bude podkládat";
        }
        String podkládaný = parametry[0];
        String podkladek  = parametry[1];
        Bag batoh = Hra_destnik.getHra().getBag();
        if (! batoh.obsahuje(podkladek)) {
              return "Můžete podložit pouze předmětem, který držíte v ruce.";
        }                                                       //==========>
        Mistnost mistnost = Mistnost.getAktuálníMístnost();
        Object predmet = (Object)Utility.najdi(podkládaný,
                          mistnost.getObjects());
        String odpoved = "";
        if (predmet != null) {
            odpoved = CHCE_PODLOŽIT + podkládaný + PŘEDMĚTEM + podkladek + ".";
//            odpoved = "Rozhodl(a) jste se podložit předmět " + podkládaný +
//                      " předmětem " + podkladek + ".";
        }
        if (batoh.getObjects().size() > 1) {
            odpoved += NELZE_NADZVEDNOUT;
//                  "\nBohužel máte obě ruce plné a nemáte ji čím nadzvednout.";
            return odpoved;                                     //==========>
        }
        if (! podkládaný.equalsIgnoreCase("postel")) {
            return odpoved;
        }
        if (! podkladek.equalsIgnoreCase("časopis")) {
            odpoved += "Nezvolil(a) jste optimální předmět pro podložení.\n" +
                       "Stále nejde dostat destnik.";
            return odpoved;                                     //==========>
        }
        batoh.vyjmi(podkladek);
        Stav.POSTEL_PODLOZENA = true;
        odpoved += POSTEL_PODLOŽENA;
//            "\nLednička je úspěšně podložena - nyní by již měla jít otevřít.";
        Mistnost.Ložnice.poloz(new Object ("Deštník"));
        return odpoved;                                         //==========>
    }



//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================
//== VNOŘENÉ A VNITŘNÍ TŘÍDY ===================================================
//== TESTY A METODA MAIN =======================================================

}
